package _03_Operator;
/**
 * & 位与,两边都是真 结果才是真
| 位或,一边为真 结果就为真
! 位非,取反,真就是假,假就是真
^ 位异或,两边不一样就是真

~ 按位非
比如 0的二进制 00000000
~0 之后 就是 11111111 反码 10000000
>> : 右移运算符(考虑符号位,就是再怎么移动,符号位不变,正数就是正数,负数就是负数)
 8 >> 2 = 2
32 16 8 4 2 1
正数 左边补0, 负数 左边补1  考虑符号位

X >> n = x/2^n (不会出现小数,取商)

<< : (不考虑符号位,最大值移动就会变负数,最小值移动就会变正数)同上,就是向左移动
X << n = x*2^n
>>> : 右移,不考虑符号位
正数没有影响,负数直接变正数,因为把符号位的1替换成0
直接最左边补0



&&  且,短路与  和 & 一样,如果第一个语句为假 第二个语句不执行,结果直接为假即可
||   或.短路或  和 | 一样,同上,第一个就为真,第二个就不执行,结果直接为真即可
 * @author lenovo
 *
 */
public class Operator_03 {
	public static void main(String[] args) {
		int a = 10;
		int b = 11;
		System.out.println(a < b | a > b);
		// true可以看成1,false可以看成0,|是有1则1,全0为0
		System.out.println(a < b & a > b);
		// &是有0则0,全1为1
		System.out.println(!true);
		System.out.println(true ^ false);
		System.out.println(true ^ true);
		System.out.println(false ^ false);
		System.out.println(false ^ true);
		// ^是相同为0,不同为1
		System.out.println(~1);
		System.out.println(-1111111111 >> 1);
		System.out.println(2 << 4);
		System.out.println(-1 >>> 1);
		int x = 10, y = 10;
		// 第一个语句为假,结果为假,第二个语句不执行
		boolean z = x > y && x > y++;
		System.out.println(z);
		System.out.println(y);
		// &&后边的语句不执行,y的值不变
	}
}
